package com.hxexp.weixin.mvc.station.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hxexp.weixin.common.exception.APIException;
import com.hxexp.weixin.common.exception.ServiceException;
import com.hxexp.weixin.common.jsptag.CustomFunctions;
import com.hxexp.weixin.hpe.api.arrivestations.ArriveStationsAPI;
import com.hxexp.weixin.hpe.api.arrivestations.model.ArriveStationsParamBean;
import com.hxexp.weixin.hpe.api.arrivestations.model.ArriveStationsResultBean;
import com.hxexp.weixin.hpe.api.startstations.StartStationsAPI;
import com.hxexp.weixin.hpe.api.startstations.model.StartStationsBean;
import com.hxexp.weixin.hpe.api.startstations.model.StartStationsParamBean;
import com.hxexp.weixin.hpe.api.startstations.model.StartStationsResultBean;
import com.hxexp.weixin.mvc.station.service.StationService;

/**
 * 车站服务实现类
 * @author li.jiang
 *
 */
@Service
public final class StationServiceImpl implements StationService {
    @Autowired
    private StartStationsAPI startStationsAPI;
    @Autowired
    private ArriveStationsAPI arriveStationsAPI;
    /* (non-Javadoc)
     * @see com.hxexp.weixin.mvc.station.service.StationService#getStartStations()
     */
    @Override
    public StartStationsResultBean getStartStations(String groupId) throws ServiceException {
        StartStationsResultBean startStationsResult = new StartStationsResultBean();
        StartStationsParamBean startStationsParamBean = new StartStationsParamBean();
        startStationsParamBean.setGroupId(groupId);

        try {
            startStationsResult = startStationsAPI.getStartStations(startStationsParamBean);
        } catch (APIException e) {
            throw new ServiceException(e);
        }
        return startStationsResult;
    }

    /* (non-Javadoc)
     * @see com.hxexp.weixin.mvc.station.service.StationService#getArriveStations(com.hxexp.weixin.model.hpe.arrivestations.ArriveStationsParamBean)
     */
    @Override
    public ArriveStationsResultBean getArriveStations(ArriveStationsParamBean arriveStationsParamBean)
            throws ServiceException {
        ArriveStationsResultBean arriveStationsResult = new ArriveStationsResultBean();

        try {
            arriveStationsResult = arriveStationsAPI.getArriveStations(arriveStationsParamBean);
        } catch (APIException e) {
            throw new ServiceException(e);
        }
        return arriveStationsResult;
    }

    /*
     * (non-Javadoc)
     *
     * @see com.hxexp.weixin.mvc.station.service.StationService#filerStartStations(java.lang.String)
     */
    @Override
    public List<StartStationsBean> includeStartStations(String cityInitial, List<StartStationsBean> startStationList) throws ServiceException {
        List<StartStationsBean> filteredStartStationList = new ArrayList<StartStationsBean>();
        for (StartStationsBean startStation : startStationList) {
            if (cityInitial.equalsIgnoreCase(startStation.getCityInitial())) {
                filteredStartStationList.add(startStation);
            }
        }
        return filteredStartStationList;
    }

    /*
     * (non-Javadoc)
     *
     * @see com.hxexp.weixin.mvc.station.service.StationService#excludeStartStations(java.util.List)
     */
    @Override
    public List<StartStationsBean> excludeStartStations(List<StartStationsBean> startStationList) throws ServiceException {
        List<StartStationsBean> startStations = new ArrayList<StartStationsBean>();
        for (StartStationsBean startStation : startStationList) {
            if (!CustomFunctions.isDisableStartCityInitial(startStation.getCityInitial())) {
                startStations.add(startStation);
            }
        }
        return startStations;
    }

}
